{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "accelerator": "GPU",
    "colab": {
      "name": "DyConv_inspect.ipynb",
      "provenance": [],
      "collapsed_sections": []
    },
    "kernelspec": {
      "display_name": "Python 3",
      "name": "python3"
    },
    "language_info": {
      "name": "python"
    }
  },
  "cells": [
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "DfNFwlN6yKTL",
        "outputId": "490062d8-23ca-4c88-b912-34494b85603a"
      },
      "source": [
        "from google.colab import drive\n",
        "drive.mount('/content/drive')\n",
        "\n",
        "root_dir = '/content/drive/MyDrive/DynamicConvolution'"
      ],
      "execution_count": 1,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "fHkeeKVnyUh1"
      },
      "source": [
        "import os\n",
        "import sys\n",
        "sys.path.append(root_dir)"
      ],
      "execution_count": 2,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "HFcpC9UjyU56",
        "outputId": "224a794b-38f7-4a8d-8675-1cf498aefb4b"
      },
      "source": [
        "from utils.options import Options\n",
        "import inspect_attention\n",
        "from inspect_attention import *\n",
        "\n",
        "\n",
        "experiment_name = \"Resnet_DY_05\"\n",
        "epoch = 100\n",
        "\n",
        "experiment_path = os.path.join(root_dir, \"experiments\", experiment_name)\n",
        "\n",
        "opt = Options(config_file_arg=\"config_path\", suppress_parse=True)\n",
        "opt.load_from_file(os.path.join(experiment_path, \"config.yaml\"))\n",
        "opt.experiments = os.path.join(root_dir, \"experiments\")\n",
        "opt.checkpoint_path = os.path.join(experiment_path, f\"{experiment_name}_{epoch}.pth\")\n",
        "\n",
        "assert opt.use_dynamic"
      ],
      "execution_count": 3,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Warning: redundant option checkpoints_dir\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "-PCFH_ajyd1w",
        "outputId": "2b21c327-717b-4b3b-c312-b7bf00da9e08"
      },
      "source": [
        "opt.__dict__"
      ],
      "execution_count": 4,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "{'_config_file_arg': 'config_path',\n",
              " 'batch_size': 64,\n",
              " 'checkpoint_path': '/content/drive/MyDrive/DynamicConvolution/experiments/Resnet_DY_05/Resnet_DY_05_100.pth',\n",
              " 'config_path': '',\n",
              " 'criterion': 'SmoothNLLLoss',\n",
              " 'criterion_args': (0.1,),\n",
              " 'dataset_class': 'TinyImageNet_dataset',\n",
              " 'device': 'cuda',\n",
              " 'experiment_name': 'Resnet_DY_05',\n",
              " 'experiments': '/content/drive/MyDrive/DynamicConvolution/experiments',\n",
              " 'max_epoch': 100,\n",
              " 'model_class': 'ResNet10',\n",
              " 'model_extra_args': (0.5,),\n",
              " 'nof_kernels': 4,\n",
              " 'num_workers': 2,\n",
              " 'optimizer': 'SGD',\n",
              " 'optimizer_args': (0.1, 0.9, 0, 0.0001),\n",
              " 'reduce': 4,\n",
              " 'save_freq': 5,\n",
              " 'scheduler': 'StepLR',\n",
              " 'scheduler_args': (30, 0.1),\n",
              " 'temperature': (30, 1, 10),\n",
              " 'use_dynamic': True}"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 4
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "6o7bywvRWBtc"
      },
      "source": [
        "model = get_inspect_model(opt)"
      ],
      "execution_count": 5,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Un5l_kwyZnXy"
      },
      "source": [
        "# train_dl = data.create_data_loader(opt, \"train\")\n",
        "# inspect_attention.attentions_register = {}\n",
        "# test_score = test(model, opt.temperature[1], train_dl, opt.device)\n",
        "# print(\"Train score:\", test_score)"
      ],
      "execution_count": 6,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "M6P3QwD4z4E5",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "d5b998ff-9e51-433e-9a3f-3c09f3e8017e"
      },
      "source": [
        "test_dl = data.create_data_loader(opt, \"test\")\n",
        "inspect_attention.attentions_register = {}\n",
        "test_score = test(model, opt.temperature[1], test_dl, opt.device)\n",
        "print(\"Test score:\", test_score)"
      ],
      "execution_count": 7,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Test score: 0.5392\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "ywe6bDAyA2kf",
        "outputId": "d90da4ec-1906-49be-a893-c324dbfa3aec"
      },
      "source": [
        "compute_entropy(inspect_attention.attentions_register)"
      ],
      "execution_count": 8,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "{'14x14': tensor(1.0643),\n",
              " '28x28': tensor(1.2968),\n",
              " '56x56': tensor(1.3518),\n",
              " '7x7': tensor(1.0041)}"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 8
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "sLHm-OwM6C6A"
      },
      "source": [
        "import pandas as pd\n",
        "import matplotlib.pyplot as plt\n",
        "import seaborn as sns\n",
        "\n",
        "def to_pandas(register):\n",
        "  labels = []\n",
        "  values = []\n",
        "  for resolution, t_list in register.items():\n",
        "    t = torch.cat(t_list)\n",
        "    labels.extend([resolution] * len(t))\n",
        "    values.extend(torch.distributions.Categorical(t).entropy().tolist())\n",
        "  return pd.DataFrame({'Resolution': labels, 'Entropy': values})"
      ],
      "execution_count": 9,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 456
        },
        "id": "JX-dv4J97X5-",
        "outputId": "fd7a9b4c-d61e-4f8f-8225-adc1fa7f3056"
      },
      "source": [
        "df = to_pandas(inspect_attention.attentions_register)\n",
        "fig, _ = plt.subplots(figsize = (12, 7))\n",
        "b = sns.boxplot(data=df, x=\"Resolution\", y=\"Entropy\")\n",
        "\n",
        "b.set_xlabel(\"Resolution\",fontsize=20)\n",
        "b.set_ylabel(\"Entropy\",fontsize=20)\n",
        "b.tick_params(labelsize=16)"
      ],
      "execution_count": 10,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 864x504 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "8G61e7Qi7nju"
      },
      "source": [
        "fig.savefig(\"plot.pdf\", bbox_inches='tight')"
      ],
      "execution_count": 11,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "tN6L0WvP5InD"
      },
      "source": [
        ""
      ],
      "execution_count": 11,
      "outputs": []
    }
  ]
}